---------------------------------------------------------------------------------:::::::::::::::::::
-------------------------------------------=+****++=------------------------------::::::::::::::::::
----------------------------------------=*#%%%%%%%%%#*+=-------------------------:::::::::::::::::::
--------------------------------------+#%%%%%%%%@@@@@@%%###*+=-------------------:::::::::::::::::::
-------------------------------------+#%%%@@@@@@@@@@@@@@@%%@@%#+----------------::::::::::::::::::::
------------------------------------=#%%@@@@@@@@@@@@@@@%###%@@@@%+--------------::::::::::::::::::::
-----------------------------------+%@%###%%%%%@@@%%%#*+++++*#@@@%*-------------::::::::::::::::::::
----------------------------------+%@%**######%%###**+++++++++*%@@%*=-----------::::::::::::::::::::
---------------------------------+%@%*******##*****+++++=++++++*%%%%*----------:::::::::::::::::::::
--------------------------------=#@%*************+++++++==+++++++###%=--------::::::::::::::::::::::
--------------------------------+%@#*********+++++++++++=+=+++++++##%+--------::::::::::::::::::::::
--------------------------------+@%*********+++++++++=======++++=+*#%#-------:::::::::::::::::::::::
----------------------------===-*@#**#******+++++++++++****+++++++*#%%=------:::::::::::::::::::::::
-----------------------=========*%#**###%%%##**++++**##%@%%####++=+#%%*-----::::::::::::::::::::::::
------------------==============+%#*#%%###%%%%#**+**#######******++*%@#-----::::::::::::::::::::::::
----------------================+%%#######%%%%%%#######%@@@%%#*++*+#@@#-----::::::::::::::::::::::::
-------------====================#%**##%#%%%#%%%*++*%###%%#*****+*+*#*+-----::::::::::::::::::::::::
-----------======================*%**#########@%*+++%#**#**+++==++=***=-----::::::::::::::::::::::::
---------=======================*%%**********#%#*+++*#*+***+===++==+#+------::::::::::::::::::::::::
-------=========================+#%*********#%##*+++++*#*****+++==++*#=----::::::::::::::::::::::...
-----============================*%***#########***+++++*****++++==++++-----::::::::::::::::::::::...
----===========================+++%#*******######**###*******++++++++=----:::::::::::::::::::::.....
---============================+++*#******#####%###********###*+++++=----:::::::::::::::::::::..:...
----===========================++++*****#%#######*********####*+++=------::::::::::::::::::::::.....
-----=========================+++++++***##%%%%####*****#%@%***++++=----::::::::::::::::::::::::.....
-----=========================+++++++*##*##%%@@%%#******#*++++++++-----::::::::::::::::::::::::::...
----=========================+++++++++*###########****+++++++++++=----::::::::::::::::::::::::::::..
----=========================++++++++++*########******+++++++++**=--:::::::::::::::::::::::::::::...
---=========================++++++++++++*###*##*****++++++++++**+=--:::::::::::::::::::::::::::::...
-===========================+++++++++++++*##******++++++++++***+==-::::::::::::::::::::::::::::::...
===========================+++++++++++++++*#####******+++*****++==-:::::::::::::::::::::::::::::::.:
==========================+++++++++++++++=+*#%%##******####*++++==-::::::::::::::::::::::::::::::::.
-========================++++++++++++++++***###%%%%%%%%##**+++=====:::::::::::::::::::::::::::::::::
---====================++++++++++++++=+#%%#**#########***+++=======-::::::::::::::::::::::::::::::::
-----=================++++++++++++++=+*%@##*****##**++++++=========+-:::::::::::::::::::::::::::::::
------===============+++++++++++++++=+*@%##*********++=============+*-::::::::::::::::::::::::::::::
--------===========++++++++++++++++===+*@%##********++++++======+==+*-::::::::::::::::::::::::::::::
-----------=================+++++++===--+%%##*******+++++====++++=+*=:::::::::::::::::::::::::::::::
------------====------------===+=-=====--=#%##*****+++++=+=+++++++*=::::::::::::::::::::::::::::::::
-----------===----------------=+---========++++****+++++++++++++*%+-::::::::::::::::::::::::::::::::
---------=-------------------=++=----==+**+=---=**+++++++++++++*+=-:-:::::::::::::::::::::::::::::::
------====-------------------==++++=-=+*++*+==---++++++++++++=+-:-=++=-:::::::::::::::::::::::::::::
-========-----------------------==--------==+==---=+++++++**+=----=====--:::::::::::::::::::::::::::
==========-----------------------------------==----=++++*+----::::::::::::::::::::::::::::::::::::::
==========-----------------------------------------==+*+=---::::::::::::::::::::::::::::::::::::::::
==========---------=-----------=------------------:-==-:::::::::::::::::::::::::::::::::::::::::::::
==========---------=-------------------------------=-:::::::::::::::::::::::::::::::::::::::::::::::
=====-===-==-------==----------------------------==-:-::::::::::::::::::::::::::::::::::::::::::::::
=====--==--=------------------------------------==-:::::::::::::::::::::::::::::::::::::::::::::::::
====---==--==-----------------------------------==::::::::::::::::::::::::::::::::::::::::::::::::::
====---==---=-----==----------------------------=-::::::::::::::::::::::::::::::::::::::::::::::::::
====---==---=----===---------------------------==::::::::::-::::::::::::::::::::::::::::::::::::::::
====---==---==---===---------------------------==:::::::::::::::::::::::::::::::::::::::::::::::::::
====----==--==--====---------------------------=-:::::::::::::::::::::::::::::::::::::::::::::::-:::
=====---==---+=-=======------------------------=-::::::::-:::::::::::::::::::::::::::::::::::::--:::
=====----==--=+=+======-------------------------:::::--::-:::::::::::::::::::::::::::::::::::::--:::
=-====---==--=*+=======-------------------------:::::::::--:::::::::::::::::::::::::::::::::::---:::